package com.kx.base.util;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * 图片工具类
 * @Author Sun
 * @Date 2021/7/22 23:08
 */
public class ImageUtil {
    /**
     * 放缩图片
     * 0次IO
     */
    public static BufferedImage zoom(BufferedImage sourceImage,int width,int height,String title){
        //放缩
        Image image=sourceImage.getScaledInstance(width,height,Image.SCALE_SMOOTH);
        //做一个空白图片出来
        BufferedImage zoomImage=new BufferedImage(width,height,sourceImage.getType());
        //把放缩之后的图片放到zoomImage上
        Graphics graphics=zoomImage.getGraphics();
        //设置底色为白色
        graphics.setColor(new Color(0xfffffff));
        //绘制
        graphics.drawImage(image,0,0,null);
        //绘制水印
        if(title!=null){
            graphics.setColor(new Color(0xffff0000));
            //文字的宽度
            int stringWidth=graphics.getFontMetrics().stringWidth(title);
            //文字的高度  中文的高度  是小于字体模型高度的
            int stringHeight=(int)(0.25*graphics.getFontMetrics().getHeight());

            graphics.drawString(title,width-stringWidth,height-stringHeight);
        }
        return zoomImage;
    }
    /**
     * 放缩图片
     * 两次IO
     * @param sourcePath 原图片的位置
     * @param targetPath 放缩之后的图片的位置
     * @param width 目标大小的宽度
     * @param height 目标大小的高度
     * @param title 水印标题
     */
    public static String zoom(String sourcePath,String targetPath,int width,int height,String title){
        //获取文件格式
        String format=sourcePath.substring(sourcePath.lastIndexOf(".")+1);
        //获取源文件的图片对象
        BufferedImage bufferedImage=null;
        try {
            bufferedImage= ImageIO.read(new File(sourcePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //放缩
        Image image=bufferedImage.getScaledInstance(width,height,Image.SCALE_SMOOTH);
        //做一个空白图片出来
        BufferedImage zoomImage=new BufferedImage(width,height,bufferedImage.getType());
        //把放缩之后的图片放到zoomImage上
        Graphics graphics=zoomImage.getGraphics();
        //设置底色为白色
        graphics.setColor(new Color(0xfffffff));
        //绘制
        graphics.drawImage(image,0,0,null);


        //绘制水印
        if(title!=null){
            graphics.setColor(new Color(0xffff0000));
            //文字的宽度
            int stringWidth=graphics.getFontMetrics().stringWidth(title);
            //文字的高度  中文的高度  是小于字体模型高度的
            int stringHeight=(int)(0.25*graphics.getFontMetrics().getHeight());

            graphics.drawString(title,width-stringWidth,height-stringHeight);
        }

        //把文件保存起来
        try {
            ImageIO.write(zoomImage,format,new File(targetPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return targetPath;
    }


    public static void main(String[] args) throws IOException {
        //zoom("C:\\TEST\\123.jpg","C:\\TEST\\123_zoom.jpg",192,108,"水印标题");
        BufferedImage image=ImageIO.read(new File("C:\\TEST\\123.jpg"));
        //384,116,"0次IO的方式"
        image=zoom(image,384,216,"0次IO的方式");
        ImageIO.write(image,"jpg",new File("C:\\TEST\\123_zoom1.jpg"));
    }
}
